module piano #(
    parameter base_CLK = 50_000_000
) (
    input            clk,
    input      [6:0] key,
    output        out
);

  reg  [ 10:0] Scale;  // 升高一个八度，使用9位宽
  wire [24:0] N_div;  // 实际用于分频的数值
  assign N_div = base_CLK / (Scale*2);  // 通过公式计算实际需分频的值

  Freq_div #(
      .base_CLK(base_CLK)
  ) freq_divider (
      .clk(clk),
      .N  (N_div),
      .out(out)
  );

  always @(key) begin  // 根据键盘按键更新 Scale 的值
    case (key)
      7'b0000001: Scale <= 11'd523;   // do
      7'b0000010: Scale <= 11'd587;   // re
      7'b0000100: Scale <= 11'd659;   // mi
      7'b0001000: Scale <= 11'd698;   // fa
      7'b0010000: Scale <= 11'd784;   // sol
      7'b0100000: Scale <= 11'd880;   // la
      7'b1000000: Scale <= 11'd988;   // si
      default:    Scale <= 9'd0;     // 无效输入
    endcase
  end

endmodule
